package com.wy.utils;

import org.apache.commons.lang3.RandomStringUtils;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * 随机工具类
 */
public class RandomUtils {

    public static void main(String[] args) {
        System.out.println(getRandomChar());
        System.out.println(randomString());
    }

    //①　获取一个随机正整数（10分）
    public static int getRandomNum(){
        Random random = new Random();
        return random.nextInt(Integer.MAX_VALUE);
    }
    //②　获取一个90以内的正整数（10分）
    public static int getRandomNum1(){
        Random random = new Random();
        return random.nextInt(90);
    }
    //③　获取一个在60-100以内的正整数（10分）
    public static int getRandomNum2(){
        Random random = new Random();
        return 60+random.nextInt(40);
    }
    //④　获取20个在50-300以内的正整数（10分）
    public static List<Integer> getRandomNum3(){
        ArrayList<Integer> integers = new ArrayList<>();
        for(int i=0;i<20;i++){
            Random random = new Random();
            int num = 50+random.nextInt(250);
            integers.add(num);
        }
        return integers;
    }
    //生成字母的n个随机字符串 length表示生成字符串的长度
    public static String getRandomString(int length) { // length表示生成字符串的长度
        String base = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(base.length());
            sb.append(base.charAt(number));
        }
        return sb.toString();
    }
    //生成字母的n个随机字符串 length表示生成字符串的长度
    public static String getRandomMaxString(int length) { // length表示生成字符串的长度
        String base = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(base.length());
            sb.append(base.charAt(number));
        }
        return sb.toString();
    }
    //生成数字的n个随机字符串 length表示生成字符串的长度
    public static String getRandomNumber(int length) { // length表示生成数字的长度
        String base = "123456789";

        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(base.length());
            sb.append(base.charAt(number));
        }
        return sb.toString();
    }
    //生成字母+数字的n个随机字符串 length表示生成字符串的长度
    public static String getRandom(int length) {
        String base = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789";
        System.out.println(base.toLowerCase());
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(base.length());
            sb.append(base.charAt(number));
        }
        return sb.toString();
    }
    /**
     * 生成随机汉字（一级汉字）
     * GB 2312-80 是中国国家标准简体中文字符集，全称《信息交换用汉字编码字符集·基本集》
     * GB2312 标准共收录 6763 个汉字，其中一级汉字 3755 个，二级汉字 3008 个；
     * GB2312 中对所收汉字进行了“分区”处理，每区含有 94 个汉字/符号。这种表示方式也称为区位码。
     * 01 - 09 区为特殊符号。
     * 16 - 55 区为一级汉字，按拼音排序。
     * 56 - 87 区为二级汉字，按部首/笔画排序。
     * 10 - 15 区及 88 - 94 区则未有编码。举例来说，“啊”字是 GB2312 之中的第一个汉字，它的区位码就是 1601。
     * 每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”，第二个字节称为“低位字节”。
     * “高位字节”使用了 0xA1 - 0xF7(把 01 - 87 区的区号加上 0xA0)，
     * “低位字节”使用了 0xA1 - 0xFE(把 01 - 94 位的位号加上 0xA0)。
     */
    public static char getRandomChar() {
        String str = "";
        int hightPos; //
        int lowPos;
        Random random = new Random();
        hightPos = (176 + Math.abs(random.nextInt(39)));
        lowPos = (161 + Math.abs(random.nextInt(93)));
        byte[] b = new byte[2];
        b[0] = (Integer.valueOf(hightPos)).byteValue();
        b[1] = (Integer.valueOf(lowPos)).byteValue();
        try {
            str = new String(b, "GBK");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            System.out.println("错误");
        }

        return str.charAt(0);
    }
    /**
     * 生成随机汉字（二级汉字）
     */
    private static String randomString() {
        return RandomStringUtils.random(1, 0x4e00, 0x9fa5, false, false);
    }
}
